/*
 ***************************************************************************************
 *  Copyright (C) 2006 EsperTech, Inc. All rights reserved.                            *
 *  http://www.espertech.com/esper                                                     *
 *  http://www.espertech.com                                                           *
 *  ---------------------------------------------------------------------------------- *
 *  The software in this package is published under the terms of the GPL license       *
 *  a copy of which has been included with this distribution in the license.txt file.  *
 ***************************************************************************************
 */
package com.espertech.esper.common.internal.epl.historical.datacache;

import com.espertech.esper.common.internal.epl.index.base.EventTable;

/**
 * Implementations serve as caches for historical or reference data retrieved
 * via lookup keys consisting or one or more rows represented by a list of events.
 */
public interface HistoricalDataCache {
    /**
     * Ask the cache if the keyed value is cached, returning a list or rows if the key is in the cache,
     * or returning null to indicate no such key cached. Zero rows may also be cached.
     *
     * @param methodParams is the keys to look up in the cache
     * @return a list of rows that can be empty is the key was found in the cache, or null if
     * the key is not found in the cache
     */
    public EventTable[] getCached(Object methodParams);

    /**
     * Puts into the cache a key and a list of rows, or an empty list if zero rows.
     * <p>
     * The put method is designed to be called when the cache does not contain a key as
     * determined by the get method. Implementations typically simply overwrite
     * any keys put into the cache that already existed in the cache.
     *
     * @param methodParams is the keys to the cache entry
     * @param rows         is a number of rows
     */
    public void put(Object methodParams, EventTable[] rows);

    /**
     * Returns true if the cache is active and currently caching, or false if the cache is inactive and not currently caching
     *
     * @return true for caching enabled, false for no caching taking place
     */
    public boolean isActive();

    void destroy();
}
